#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>

int main(int argc ,char const *argv[]){

    struct stat st;
    if(2 != argc){
        printf("Usage:%s <filename>",argv[0]);
        return -1;
    }

    if(stat(argv[1],&st) < 0){
        perror("stat err");
        return -1;
    }
    printf("inode:%lu  nlink:%lu  size:%lu\n",st.st_ino,st.st_nlink,st.st_size);

    // if((st.st_mode & __S_IFMT) == __S_IFDIR){
    //     printf("d");
    // }
    // if((st.st_mode & __S_IFMT) == __S_IFCHR){
    //     printf("c");
    // }
    // if((st.st_mode & __S_IFMT) == __S_IFREG){
    //     printf("-");
    // }

//判断文件类型
    switch(st.st_mode & __S_IFMT){
        case  __S_IFDIR://目录
            printf("d");
            break;
        case  __S_IFCHR://字符设备
            printf("C");
            break;
        case  __S_IFREG://普通文件
            printf("-");
            break;
        case  __S_IFLNK://链接文件
            printf("l");
            break;
        case  __S_IFIFO://管道文件
            printf("p");
            break;
        case  __S_IFSOCK://套接字文件
            printf("s");
            break;
    }
    printf(" ");

//判断文件权限
    //用户
    if(st.st_mode & S_IRUSR){
        printf("r");
    }else{
        printf("-");
    }

    if(st.st_mode & S_IWUSR){
        printf("w");
    }else{
        printf("-");
    }

    if(st.st_mode & S_IXUSR){
        printf("x");
    }else{
        printf("-");
    }
    printf(" ");

    //组
    if(st.st_mode & S_IRGRP){
        printf("r");
    }else{
        printf("-");
    }

    if(st.st_mode & S_IWGRP){
        printf("w");
    }else{
        printf("-");
    }

    if(st.st_mode & S_IXGRP){
        printf("x");
    }else{
        printf("-");
    }
    printf(" ");

    //其他
    if(st.st_mode & S_IROTH){
        printf("r");
    }else{
        printf("-");
    }

    if(st.st_mode & S_IWOTH){
        printf("w");
    }else{
        printf("-");
    }

    if(st.st_mode & S_IXOTH){
        printf("x");
    }else{
        printf("-");
    }

    return 0;
}